// 我的进度详情页面
const minLivingAllowanceAPI = require('../../../../api/minLivingAllowance.js');
const authUtils = require('../../../../utils/auth');

Page({
  data: {
    applicationId: '',
    applicationInfo: null,
    loading: true,
    dataLoaded: false, // 添加数据加载标志
    // 进度相关 - 简化为两个步骤
    progressSteps: [
      {
        id: 'submitted', 
        name: '申请提交', 
        status: 'pending', 
        description: '申请人提交申请材料',
        icon: '📝',
        estimatedTime: '立即完成'
      },
      { 
        id: 'admin_review', 
        name: '管理员审核', 
        status: 'pending', 
        description: '管理员审核申请材料并做出决定',
        icon: '👨‍💼',
        estimatedTime: '1-3个工作日'
      }
    ],
    currentStep: 0,
    // 处理记录
    processLog: [],
    // 附件信息
    attachments: [],
    // 联系信息
    contactInfo: {
      phone: '400-123-4567',
      email: 'service@village.gov.cn',
      address: '村委会办公室'
    },
    // 全局加载状态
    globalLoading: false,
    globalLoadingText: '用户信息加载中...'
  },

  // 显示全局加载
  showGlobalLoading(text = '用户信息加载中...') {
    const app = getApp()
    app.showGlobalLoading({
      loadingText: text
    })
  },

  // 隐藏全局加载
  hideGlobalLoading() {
    const app = getApp()
    app.hideGlobalLoading()
  },

  // 更新全局加载状态
  updateGlobalLoading(data) {
    this.setData({
      globalLoading: data.globalLoading,
      globalLoadingText: data.globalLoadingText || this.data.globalLoadingText
    })
  },

  onLoad(options) {
    // 显示页面加载效果
    this.showGlobalLoading('用户信息加载中...')
    console.log('=== 页面onLoad触发 ===', options);
    const { id } = options;
    if (!id) {
      wx.showToast({
        title: '参数错误',
        icon: 'none'
      });
      setTimeout(() => {
        wx.navigateBack();
      }, 1500);
      return;
    }

    this.setData({ applicationId: id });
    this.loadApplicationDetail();
  },

  onShow() {
    console.log('=== 页面onShow触发 ===', 'dataLoaded:', this.data.dataLoaded);
    
    // 完全禁用onShow中的数据重新加载，避免从图片预览返回时刷新页面
    // 数据只在onLoad时加载一次
    console.log('onShow被调用，但跳过数据重新加载以避免页面刷新');
  },

  onHide() {
    console.log('=== 页面onHide触发 ===');
    // 页面隐藏时不做任何操作，保持当前状态
  },

  onUnload() {
    console.log('=== 页面onUnload触发 ===');
    // 页面卸载时清理状态
  },

  // 加载申请详情
  loadApplicationDetail() {
    this.setData({ loading: true });

    // 获取用户信息
    const userInfo = authUtils.getCurrentUser();
    if (!userInfo || !userInfo.userId) {
      wx.showToast({
        title: '请先登录',
        icon: 'none'
      });
      setTimeout(() => {
        wx.navigateBack();
      }, 1500);
      return;
    }

    // 调用真实API获取申请详情
    minLivingAllowanceAPI.getApplicationDetail(this.data.applicationId, userInfo.userId)
      .then(res => {
        console.log('获取申请详情成功:', res);
        if (res.success) {
          const data = res.data;
          console.log('申请详情数据:', data);
          console.log('applicationInfo:', data.applicationInfo);
          console.log('applyTime字段:', data.applicationInfo?.applyTime);
          
          // 格式化申请信息中的时间字段
          const formattedApplicationInfo = {
            ...data.applicationInfo,
            applyTimeFormatted: this.formatTime(data.applicationInfo.applyTime),
            reviewTimeFormatted: this.formatTime(data.applicationInfo.reviewTime),
            processTimeFormatted: this.formatTime(data.applicationInfo.processTime)
          };
          
          console.log('格式化后的申请信息:', formattedApplicationInfo);
          console.log('申请时间格式化结果:', formattedApplicationInfo.applyTimeFormatted);
          
          // 设置申请信息
          this.setData({
            applicationInfo: formattedApplicationInfo,
            progressSteps: data.progressSteps && data.progressSteps.length > 0 ? data.progressSteps : this.data.progressSteps,
            processLog: data.processLog || [],
            contactInfo: data.contactInfo || this.data.contactInfo,
            loading: false,
            dataLoaded: true // 标记数据已加载
          });
          
          // 更新进度步骤状态
          this.updateProgressSteps(data.applicationInfo.status);
          
          // 隐藏全局加载状态
          this.hideGlobalLoading();
        } else {
          console.error('API返回失败:', res);
          wx.showToast({
            title: res.message || '获取申请详情失败',
            icon: 'none'
          });
          this.setData({ loading: false });
          // 隐藏全局加载状态
          this.hideGlobalLoading();
        }
      })
      .catch(error => {
        console.error('获取申请详情失败:', error);
        wx.showToast({
          title: '网络请求失败',
          icon: 'none'
        });
        this.setData({ loading: false });
        
        // 隐藏全局加载状态
        this.hideGlobalLoading();
        
        // 如果API调用失败，使用模拟数据作为备用
        this.loadMockData();
      });
  },

  // 加载模拟数据（备用方案）
  loadMockData() {
    const mockData = this.generateMockApplicationDetail(this.data.applicationId);
    
    // 格式化模拟数据中的时间字段
    const formattedMockData = {
      ...mockData,
      applyTimeFormatted: this.formatTime(mockData.applyTime),
      reviewTimeFormatted: this.formatTime(mockData.reviewTime),
      processTimeFormatted: this.formatTime(mockData.processTime)
    };
    
    this.setData({
      applicationInfo: formattedMockData,
      loading: false,
      dataLoaded: true // 标记数据已加载
    });
    
    this.updateProgressSteps(mockData.status);
    this.generateProcessLog(mockData);
  },

  // 生成模拟申请详情数据
  generateMockApplicationDetail(applicationId) {
    const mockApplications = [
      {
        id: applicationId,
        applicationNo: 'MZ202401150001',
        title: '最低生活保障申请',
        status: 'pending',
        statusText: '办理中',
        applicantName: '张三',
        applicantIdCard: '320123199001011234',
        applicantPhone: '13812345678',
        applicantAddress: '江苏省南京市江宁区某某村123号',
        familySize: 3,
        monthlyIncome: 1200,
        incomeSource: '务农收入',
        difficultyReason: '家庭主要劳动力因病丧失劳动能力，收入微薄，生活困难',
        idCardImage: '/uploads/id_card_123.jpg',
        householdImage: '/uploads/household_123.jpg',
        incomeProofImage: '/uploads/income_proof_123.jpg',
        applyTime: '2024-01-15 10:30:00',
        reviewTime: '2024-01-16 14:20:00',
        processTime: '2024-01-17 09:15:00',
        dept: '民政办',
        assignee: '李主任',
        reviewComment: '材料齐全，符合申请条件',
        processComment: '已安排工作人员实地走访核实',
        attachments: [
          {
            name: '身份证复印件',
            url: '/uploads/id_card_123.jpg',
            type: 'image',
            size: '2.5MB'
          },
          {
            name: '户口簿复印件',
            url: '/uploads/household_123.jpg',
            type: 'image',
            size: '1.8MB'
          },
          {
            name: '收入证明',
            url: '/uploads/income_proof_123.jpg',
            type: 'image',
            size: '1.2MB'
          }
        ]
      }
    ];

    return mockApplications[0] || {
      id: applicationId,
      applicationNo: 'MZ202401150001',
      title: '最低生活保障申请',
      status: 'pending',
      statusText: '待审核',
      applicantName: '申请人',
      applicantIdCard: '320123199001011234',
      applicantPhone: '13812345678',
      applicantAddress: '江苏省南京市江宁区某某村',
      familySize: 3,
      monthlyIncome: 1200,
      incomeSource: '务农收入',
      difficultyReason: '家庭困难',
      applyTime: new Date().toISOString(),
      dept: '民政办',
      attachments: []
    };
  },

  // 更新进度步骤
  updateProgressSteps(status) {
    console.log('更新进度步骤，状态:', status);
    console.log('当前progressSteps:', this.data.progressSteps);
    
    // 如果已经有从API获取的进度步骤数据，需要根据状态更新步骤状态
    if (this.data.progressSteps && this.data.progressSteps.length > 0) {
      console.log('使用API返回的进度步骤数据，但需要根据状态更新步骤状态');
      this.updateProgressStepsFromAPI(status);
      return;
    }

    // 根据申请状态映射到具体的步骤 - 简化为两个步骤
    const statusMap = {
      'pending': 0,           // 申请提交（已完成），管理员审核（待处理）
      'reviewing': 1,         // 申请提交（已完成），管理员审核（进行中）
      'verification': 1,      // 申请提交（已完成），管理员审核（进行中）
      'village_approval': 1,  // 申请提交（已完成），管理员审核（进行中）
      'township_approval': 1, // 申请提交（已完成），管理员审核（进行中）
      'publicity': 1,         // 申请提交（已完成），管理员审核（进行中）
      'approved': 2,          // 管理员审核（已完成）
      'completed': 2,         // 管理员审核（已完成）
      'rejected': 2           // 申请驳回（已完成）
    };

    const currentStep = statusMap[status] || 0;
    console.log('计算出的当前步骤:', currentStep);
    
    const progressSteps = this.data.progressSteps.map((step, index) => {
      let stepStatus = 'pending';
      if (index < currentStep) {
        stepStatus = 'completed';
      } else if (index === currentStep) {
        stepStatus = 'current';
      }

      return {
        ...step,
        status: stepStatus
      };
    });

    console.log('更新后的进度步骤:', progressSteps);
    console.log('当前步骤索引:', currentStep);

    // 计算进度百分比 - 修复计算逻辑
    let progressPercentage = 0;
    if (currentStep >= this.data.progressSteps.length) {
      // 所有步骤都完成了
      progressPercentage = 100;
    } else {
      // 根据当前步骤计算百分比
      // currentStep = 0: 第一步完成，第二步待处理 (50%)
      // currentStep = 1: 第一步完成，第二步进行中 (50%)
      // currentStep = 2: 所有步骤完成 (100%)
      progressPercentage = Math.round((currentStep + 1) / this.data.progressSteps.length * 100);
    }
    
    console.log('进度计算详情:');
    console.log('- 当前步骤:', currentStep);
    console.log('- 总步骤数:', this.data.progressSteps.length);
    console.log('- 计算出的百分比:', progressPercentage);
    
    this.setData({
      progressSteps,
      currentStep,
      progressPercentage
    });
  },

  // 更新从API获取的进度步骤状态
  updateProgressStepsFromAPI(status) {
    console.log('更新从API获取的进度步骤，状态:', status);
    
    // 确保有正确的两个步骤
    const defaultSteps = [
      { 
        id: 'submitted', 
        name: '申请提交', 
        status: 'pending', 
        description: '申请人提交申请材料',
        icon: '📝',
        estimatedTime: '立即完成'
      },
      { 
        id: 'admin_review', 
        name: '管理员审核', 
        status: 'pending', 
        description: '管理员审核申请材料并做出决定',
        icon: '👨‍💼',
        estimatedTime: '1-3个工作日'
      }
    ];
    
    // 使用默认步骤或API返回的步骤
    const baseSteps = this.data.progressSteps && this.data.progressSteps.length >= 2 ? this.data.progressSteps : defaultSteps;
    
    // 根据申请状态映射到具体的步骤
    const statusMap = {
      'pending': 0,           // 申请提交（已完成），管理员审核（待处理）
      'reviewing': 1,         // 申请提交（已完成），管理员审核（进行中）
      'verification': 1,      // 申请提交（已完成），管理员审核（进行中）
      'village_approval': 1,  // 申请提交（已完成），管理员审核（进行中）
      'township_approval': 1, // 申请提交（已完成），管理员审核（进行中）
      'publicity': 1,         // 申请提交（已完成），管理员审核（进行中）
      'approved': 2,          // 管理员审核（已完成）
      'completed': 2,         // 管理员审核（已完成）
      'rejected': 2           // 申请驳回（已完成）
    };

    const currentStep = statusMap[status] || 0;
    console.log('计算出的当前步骤:', currentStep);
    
    const progressSteps = baseSteps.map((step, index) => {
      let stepStatus = 'pending';
      if (index < currentStep) {
        stepStatus = 'completed';
      } else if (index === currentStep) {
        stepStatus = 'current';
      }

      return {
        ...step,
        status: stepStatus
      };
    });

    console.log('更新后的进度步骤:', progressSteps);
    console.log('当前步骤索引:', currentStep);

    // 计算进度百分比
    let progressPercentage = 0;
    if (currentStep >= baseSteps.length) {
      // 所有步骤都完成了
      progressPercentage = 100;
    } else {
      // 根据当前步骤计算百分比
      // currentStep = 0: 第一步完成，第二步待处理 (50%)
      // currentStep = 1: 第一步完成，第二步进行中 (50%)
      // currentStep = 2: 所有步骤完成 (100%)
      progressPercentage = Math.round((currentStep + 1) / baseSteps.length * 100);
    }
    
    console.log('进度计算详情:');
    console.log('- 当前步骤:', currentStep);
    console.log('- 总步骤数:', baseSteps.length);
    console.log('- 计算出的百分比:', progressPercentage);
    
    this.setData({
      progressSteps,
      currentStep,
      progressPercentage
    });
  },

  // 生成处理记录（备用方案，当API没有返回处理记录时使用）
  generateProcessLog(applicationInfo) {
    // 如果已经有从API获取的处理记录数据，直接使用
    if (this.data.processLog && this.data.processLog.length > 0) {
      return;
    }

    const processLog = [
      {
        id: 'log_1',
        action: '申请提交',
        operator: applicationInfo.applicantName,
        time: applicationInfo.applyTime,
        timeFormatted: this.formatTime(applicationInfo.applyTime),
        status: 'completed',
        comment: '您已成功提交申请，申请编号：' + applicationInfo.applicationNo
      }
    ];

    // 根据状态添加管理员审核记录
    if (applicationInfo.status === 'approved' || applicationInfo.status === 'completed') {
      const currentTime = new Date().toISOString();
      processLog.push({
        id: 'log_2',
        action: '管理员审核',
        operator: '管理员',
        time: applicationInfo.reviewTime || applicationInfo.processTime || currentTime,
        timeFormatted: this.formatTime(applicationInfo.reviewTime || applicationInfo.processTime || currentTime),
        status: 'completed',
        comment: '恭喜！您的申请已通过审核'
      });
    } else if (applicationInfo.status === 'rejected') {
      const currentTime = new Date().toISOString();
      processLog.push({
        id: 'log_2',
        action: '管理员审核',
        operator: '管理员',
        time: applicationInfo.reviewTime || applicationInfo.processTime || currentTime,
        timeFormatted: this.formatTime(applicationInfo.reviewTime || applicationInfo.processTime || currentTime),
        status: 'rejected',
        comment: applicationInfo.status === 'rejected' ? 
                 (applicationInfo.rejectReason || applicationInfo.reviewComment || applicationInfo.processComment || '申请材料不符合要求，请重新提交') :
                 (applicationInfo.reviewComment || applicationInfo.processComment || '等待审核中...')
      });
    } else {
      // 待审核状态，添加待审核记录
      processLog.push({
        id: 'log_2',
        action: '管理员审核',
        operator: '管理员',
        time: new Date().toISOString(),
        timeFormatted: this.formatTime(new Date().toISOString()),
        status: 'pending',
        comment: '等待管理员审核中...'
      });
    }

    this.setData({ processLog });
  },

  // 查看附件
  viewAttachment(e) {
    const { url, name } = e.currentTarget.dataset;
    
    // 收集所有图片URL用于预览
    const allUrls = [];
    if (this.data.applicationInfo && this.data.applicationInfo.attachments) {
      this.data.applicationInfo.attachments.forEach(attachment => {
        if (attachment.type === 'image' || attachment.url.match(/\.(jpg|jpeg|png|gif|bmp)$/i)) {
          allUrls.push(attachment.url);
        }
      });
    }
    
    // 如果只有一个图片，使用单个URL；否则使用所有图片URL
    const urls = allUrls.length > 0 ? allUrls : [url];
    const current = urls.includes(url) ? url : urls[0];
    
    wx.previewImage({
      urls: urls,
      current: current,
      success: () => {
        console.log('预览成功');
      },
      fail: () => {
        wx.showToast({
          title: '预览失败',
          icon: 'none'
        });
      }
    });
  },

  // 联系工作人员
  contactStaff() {
    wx.showActionSheet({
      itemList: ['拨打电话', '发送邮件', '在线咨询'],
      success: (res) => {
        switch (res.tapIndex) {
          case 0:
            this.makePhoneCall();
            break;
          case 1:
            this.sendEmail();
            break;
          case 2:
            this.onlineConsultation();
            break;
        }
      }
    });
  },

  // 拨打电话
  makePhoneCall() {
    wx.makePhoneCall({
      phoneNumber: this.data.contactInfo.phone,
      success: () => {
        console.log('拨打电话成功');
      },
      fail: () => {
        wx.showToast({
          title: '拨打电话失败',
          icon: 'none'
        });
      }
    });
  },

  // 发送邮件
  sendEmail() {
    wx.setClipboardData({
      data: this.data.contactInfo.email,
      success: () => {
        wx.showToast({
          title: '邮箱地址已复制',
          icon: 'success'
        });
      }
    });
  },

  // 在线咨询
  onlineConsultation() {
    wx.showToast({
      title: '在线咨询功能开发中',
      icon: 'none'
    });
  },

  // 重新申请
  reapply() {
    wx.showModal({
      title: '重新申请',
      content: '确定要重新提交申请吗？',
      success: (res) => {
        if (res.confirm) {
          wx.navigateTo({
            url: '/pages/service/civil-affairs/apply/index'
          });
        }
      }
    });
  },


  // 下拉刷新
  onPullDownRefresh() {
    console.log('下拉刷新触发');
    this.setData({ 
      dataLoaded: false,
      loading: true 
    });
    this.loadApplicationDetail();
    wx.stopPullDownRefresh();
  },

  // 返回上一页
  onBack() {
    // 直接回退到进度页面
    wx.navigateBack({
      delta: 1
    });
  },

  // 格式化时间
  formatTime(timeStr) {
    if (!timeStr) return '';
    const time = new Date(timeStr);
    const year = time.getFullYear();
    const month = String(time.getMonth() + 1).padStart(2, '0');
    const day = String(time.getDate()).padStart(2, '0');
    const hours = String(time.getHours()).padStart(2, '0');
    const minutes = String(time.getMinutes()).padStart(2, '0');
    return `${year}-${month}-${day} ${hours}:${minutes}`;
  },

  // 获取状态文本
  getStatusText(status) {
    const statusMap = {
      'pending': '待审核',
      'approved': '已通过',
      'completed': '已完成',
      'rejected': '已驳回'
    };
    return statusMap[status] || '未知';
  },

  // 获取状态颜色
  getStatusColor(status) {
    const colorMap = {
      'pending': '#f59e0b',
      'approved': '#10b981',
      'completed': '#059669',
      'rejected': '#ef4444'
    };
    return colorMap[status] || '#6b7280';
  },

  // 页面分享
  onShareAppMessage() {
    return {
      title: '我的申请进度',
      path: `/pages/user/progress/detail/index?id=${this.data.applicationId}`
    };
  }
});
